#ifndef HCOULEUR_H
#define HCOULEUR_H

/*
 *  @autheur : LEMOUEL Florian
 *  @date : 10.04.2013
 *  @version 1.0 : création de la classe complète
 *  @version 1.1 : ajout de la sérialisation
 */

#include "habillage.h"
#include <QtOpenGL>

#include "boost/serialization/serialization.hpp"
#include <boost/serialization/export.hpp>

/*
 * Classe représentant un habillage en couleur pour un objet
 * de la scène.
 */
class HCouleur :public Habillage
{
 //--------------------- Constructeurs et destructeur -------------------
public:

    //Constructeur par défault
    HCouleur();

    //Constructeur à 3 paramètres
    HCouleur(GLfloat r, GLfloat v, GLfloat b);

    //Destructeur
    ~HCouleur();
    //----------------------------------------------------------------------
    //--------------------- Méthodes ---------------------------------------

    //Fonction utilisant l'habillage de la classe mère
    void utiliser();
    //----------------------------------------------------------------------
    //--------------------- Accesseurs -------------------------------------
public:
    //Accesseur sur la couleur rouge
    GLfloat getR();

    //Accesseur sur la couleur verte
    GLfloat getV();

    //Accesseur sur la couleur bleue
    GLfloat getB();

    //Mutateur sur la couleur rouge
    void setR(GLfloat r);

    //Mutateur sur la couleur verte
    void setV(GLfloat v);

    //Mutateur sur la couleur bleue
    void setB(GLfloat b);
    //----------------------------------------------------------------------
    //--------------------- Surcharge des opérateurs -----------------------

    //----------------------------------------------------------------------
    //--------------------- Attributs --------------------------------------
private:
    GLfloat _rouge;
    GLfloat _vert;
    GLfloat _bleu;
    //----------------------------------------------------------------------
    //--------------------- Sérialisation ----------------------------------
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) {
            ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Habillage);
            ar & _rouge;
            ar & _vert;
            ar & _bleu;
    }
   //----------------------------------------------------------------------

};

BOOST_CLASS_EXPORT(HCouleur);

#endif // HCOULEUR_H
